package config

import (
	"time"

	"public.com/goutil/configUtil"
	"public.com/goutil/logUtil"
	"public.com/goutil/mysqlUtil"
	"public.com/goutil/redisUtil"
)

// mysql配置对象
type DbConfig struct {
	// 游戏模型数据库链接字符串
	gameModelConfig *mysqlUtil.DBConfig

	// 游戏数据库链接字符串
	gameConfig *mysqlUtil.DBConfig

	// redis配置对象
	redisConfig *redisUtil.RedisConfig
}

var (
	// 数据库配置对象
	dbConfigObj *DbConfig
)

// 获取游戏模型数据库链接字符串
func (config *DbConfig) GetGameModelConfig() *mysqlUtil.DBConfig {
	return config.gameModelConfig
}

// 获取游戏数据库链接字符串
func (config *DbConfig) GetGameConfig() *mysqlUtil.DBConfig {
	return config.gameConfig
}

// 获取redis配置对象
func (config *DbConfig) GetRedisConfig() *redisUtil.RedisConfig {
	return config.redisConfig
}

// 创建新的Mysql配置对象
func newMysqlConfig(_gameModelConfig *mysqlUtil.DBConfig, _gameConfig *mysqlUtil.DBConfig, _redisConfig *redisUtil.RedisConfig) *DbConfig {
	return &DbConfig{
		gameModelConfig: _gameModelConfig,
		gameConfig:      _gameConfig,
		redisConfig:     _redisConfig,
	}
}

// 初始化数据库配置
func initDbConfig(configObj *configUtil.XmlConfig) error {
	logUtil.DebugLog("开始加载DbConfig")

	// 解析mysql配置数据
	tmpMysqlConfig := new(mysqlUtil.DBConfig)
	err := configObj.Unmarshal("root/DbConfig/GameModel", tmpMysqlConfig)
	if err != nil {
		return err
	}

	tmpGameConfig := new(mysqlUtil.DBConfig)
	err = configObj.Unmarshal("root/DbConfig/GameDB", tmpGameConfig)
	if err != nil {
		return err
	}

	tmpRedisConfig := new(redisUtil.RedisConfig)
	err = configObj.Unmarshal("root/DbConfig/RedisConfig", tmpRedisConfig)
	if err != nil {
		return err
	}

	tmpRedisConfig.IdleTimeout = tmpRedisConfig.IdleTimeout * time.Second
	tmpRedisConfig.DialConnectTimeout = tmpRedisConfig.DialConnectTimeout * time.Second

	// 初始化mysql配置对象
	dbConfigObj = newMysqlConfig(tmpMysqlConfig, tmpGameConfig, tmpRedisConfig)

	return nil
}

// 获取mysql配置
// 返回值：
// mysql配置对象
func GetDbConfig() *DbConfig {
	return dbConfigObj
}
